En omfattande guide för att upptÀcka och interagera med Human Interface Devices (HID) med hjÀlp av WebHID API i JavaScript. LÀr dig om enhetsupprÀkning, filtrering och bÀsta praxis för anslutning.
Frontend WebHID EnhetsupprÀkning: UpptÀck Anslutna Enheter med JavaScript
WebHID API öppnar möjligheten för webbapplikationer att kommunicera direkt med ett brett utbud av Human Interface Devices (HID) som vanligtvis bara Àr tillgÀngliga för nativa applikationer. Detta öppnar spÀnnande möjligheter för att skapa innovativa webbupplevelser som interagerar med specialiserad hÄrdvara som spelkontroller, anpassade inmatningsenheter, vetenskapliga instrument och mer. Den hÀr omfattande guiden dyker ner i kÀrnkonceptet enhetsupprÀkning, vilket Àr det avgörande första steget för att upprÀtta en anslutning till en önskad HID-enhet.
Vad Àr WebHID API?
WebHID API tillÄter webbapplikationer att komma Ät Human Interface Devices. Dessa enheter omfattar en bred kategori, inklusive:
- Spelkontroller: Joysticks, gamepads, racingrattar
- Inmatningsenheter: Tangentbord, möss, trackballs
- Industriella kontroller: Specialiserade kontrollpaneler, sensorgrÀnssnitt
- Vetenskapliga instrument: DataförvÀrvsenheter, mÀtverktyg
- Anpassad hÄrdvara: SkrÀddarsydda inmatningsenheter skapade för specifika ÀndamÄl
Till skillnad frÄn Àldre webblÀsar-API:er som erbjöd begrÀnsat HID-stöd, ger WebHID API direkt Ätkomst till HID-enheter, vilket gör det möjligt för utvecklare att skapa rikare och mer interaktiva webbapplikationer. FörestÀll dig att styra en robotarm i ett avlÀgset laboratorium, manipulera en 3D-modell med en anpassad inmatningsenhet eller ta emot sensordata direkt i en webbaserad instrumentpanel - allt inom webblÀsaren.
FörstÄ HID-enhetsupprÀkning
Innan du kan interagera med en HID-enhet mÄste din webbapplikation upptÀcka vilka enheter som Àr anslutna till anvÀndarens system. Denna process kallas enhetsupprÀkning. WebHID API tillhandahÄller en mekanism för att begÀra Ätkomst till specifika HID-enheter baserat pÄ leverantörs-ID (VID) och produkt-ID (PID) eller genom att anvÀnda ett bredare filter.
Processen innebÀr vanligtvis dessa steg:
- BegÀra enhetsÄtkomst: Webbapplikationen uppmanar anvÀndaren att vÀlja en HID-enhet med
navigator.hid.requestDevice(). - Filtrera enheter: Du kan ange filter för att begrÀnsa listan över enheter som presenteras för anvÀndaren. Dessa filter Àr baserade pÄ VID och PID för enheten.
- Hantera enhetsval: AnvÀndaren vÀljer en enhet frÄn listan.
- Ăppna enheten: Applikationen öppnar en anslutning till den valda enheten.
- Dataöverföring: NÀr anslutningen har upprÀttats kan applikationen skicka och ta emot data frÄn enheten.
Steg-för-steg-guide till enhetsupprÀkning
1. BegÀra enhetsÄtkomst med filter
Metoden navigator.hid.requestDevice() Àr startpunkten för att begÀra Ätkomst till HID-enheter. Den tar ett valfritt `filters`-argument, vilket Àr en array av objekt som specificerar VID och PID för de enheter du vill hitta.
HÀr Àr ett exempel pÄ hur du begÀr Ätkomst till en enhet med ett specifikt VID och PID:
async function requestHIDDevice() {
try {
const devices = await navigator.hid.requestDevice({
filters: [
{
vendorId: 0x1234, // ErsÀtt med din enhets leverantörs-ID
productId: 0x5678 // ErsÀtt med din enhets produkt-ID
},
// LÀgg till fler filter för andra enheter om det behövs
]
});
if (devices.length > 0) {
const device = devices[0]; // AnvÀnd den första valda enheten
console.log("HID Device Found:", device);
// Ăppna enheten och starta kommunikationen
await openHIDDevice(device);
} else {
console.log("No HID device selected.");
}
} catch (error) {
console.error("Error requesting HID device:", error);
}
}
// Exempel pÄ anvÀndning (t.ex. utlöst av ett knapptryck):
document.getElementById('requestButton').addEventListener('click', requestHIDDevice);
Viktiga övervÀganden:
- Leverantörs-ID (VID) och Produkt-ID (PID): Dessa Àr unika identifierare som tilldelas USB- och Bluetooth-enheter. Du mÄste hÀmta VID och PID för din mÄlenhet frÄn tillverkarens dokumentation eller med hjÀlp av systemverktyg (t.ex. Enhetshanteraren i Windows, Systeminformation i macOS eller `lsusb` i Linux).
- AnvÀndarens samtycke: Metoden
requestDevice()visar en webblÀsarstyrd behörighetsfrÄga för anvÀndaren, vilket gör att de kan vÀlja vilka HID-enheter de vill ge Ätkomst till. Detta Àr en avgörande sÀkerhetsÄtgÀrd för att förhindra att skadliga webbplatser fÄr Ätkomst till kÀnslig hÄrdvara utan anvÀndarens samtycke. - Flera filter: Du kan inkludera flera filter i `filters`-arrayen för att begÀra Ätkomst till enheter med olika VID och PID. Detta Àr anvÀndbart om din applikation stöder flera hÄrdvarukonfigurationer.
2. HĂ€mta enhetsinformation
NÀr anvÀndaren har valt en enhet returnerar metoden requestDevice() en array av HIDDevice-objekt. Varje HIDDevice-objekt innehÄller information om enheten, som dess VID, PID, usagePage, usage och samlingar. Du kan anvÀnda denna information för att ytterligare identifiera och konfigurera enheten.
async function openHIDDevice(device) {
try {
await device.open();
console.log("HID Device Opened:", device.productName);
// Lyssna efter inmatningsrapporter
device.addEventListener("inputreport", event => {
const { data, reportId } = event;
const uint8Array = new Uint8Array(data.buffer);
console.log(`Received input report ${reportId}:`, uint8Array);
// Bearbeta inmatningsrapportdata
});
device.addEventListener("disconnect", event => {
console.log("HID Device Disconnected:", device.productName);
// Hantera enhetsfrÄnkoppling
});
} catch (error) {
console.error("Error opening HID device:", error);
}
}
Enhetsegenskaper:
vendorId: Enhetens leverantörs-ID.productId: Enhetens produkt-ID.productName: Det lÀsbara namnet pÄ produkten.collections: En array av HIDCollectionInfo-objekt som beskriver enhetens HID-samlingar (rapporter, funktioner etc.). Detta kan vara mycket komplext och behövs bara för komplexa enheter.
3. Hantera enhetsanslutning och frÄnkoppling
WebHID API tillhandahÄller hÀndelser för att meddela din applikation nÀr en enhet Àr ansluten eller frÄnkopplad. Du kan lyssna efter hÀndelserna connect och disconnect pÄ objektet navigator.hid.
navigator.hid.addEventListener("connect", event => {
const device = event.device;
console.log("HID Device Connected:", device);
// Hantera enhetsanslutning (t.ex. öppna enheten igen)
});
navigator.hid.addEventListener("disconnect", event => {
const device = event.device;
console.log("HID Device Disconnected:", device);
// Hantera enhetsfrÄnkoppling (t.ex. rensa resurser)
});
BÀsta praxis för anslutningshantering:
- OmrÀkning vid anslutning: NÀr en enhet ansluts Àr det ofta bra att rÀkna om enheter för att sÀkerstÀlla att din applikation har en uppdaterad lista.
- Resursrensning vid frÄnkoppling: NÀr en enhet kopplas frÄn, slÀpp alla resurser som Àr associerade med den (t.ex. stÀng enhetsanslutningen, ta bort hÀndelselyssnare).
- Felhantering: Implementera robust felhantering för att hantera situationer dÀr en enhet misslyckas med att ansluta eller kopplas frÄn ovÀntat.
Avancerade tekniker för enhetsfiltrering
Utöver grundlÀggande VID- och PID-filtrering erbjuder WebHID API mer avancerade tekniker för att rikta in sig pÄ specifika enheter. Detta Àr sÀrskilt anvÀndbart nÀr du hanterar enheter som har flera grÀnssnitt eller funktioner.
1. Filtrera efter anvÀndningssida och anvÀndning
HID-enheter Àr organiserade i *anvÀndningssidor* och *anvÀndningar*, som definierar vilken typ av funktionalitet en enhet tillhandahÄller. Till exempel tillhör ett tangentbord anvÀndningssidan "Generic Desktop" och har en "Tangentbord"-anvÀndning. Du kan filtrera enheter baserat pÄ deras anvÀndningssida och anvÀndning för att rikta in dig pÄ specifika enhetstyper.
async function requestSpecificKeyboard() {
try {
const devices = await navigator.hid.requestDevice({
filters: [
{
usagePage: 0x01, // Generic Desktop Page
usage: 0x06 // Keyboard Usage
}
]
});
// ... (rest of the code to handle the device)
} catch (error) {
console.error("Error requesting HID device:", error);
}
}
Hitta anvÀndningssida och anvÀndningsvÀrden:
- HID-anvÀndningstabeller: De officiella HID-anvÀndningstabellerna (publicerade av USB Implementers Forum) definierar de standardiserade anvÀndningssidorna och anvÀndningarna för olika enhetstyper.
- Enhetsdokumentation: Enhetstillverkarens dokumentation kan ange anvÀndningssidan och anvÀndningsvÀrdena för deras enhet.
- HID-rapportbeskrivningar: För avancerade scenarier kan du analysera HID-rapportbeskrivningen för en enhet för att bestÀmma dess stödda anvÀndningssidor och anvÀndningar.
2. Hantera flera grÀnssnitt
Vissa HID-enheter exponerar flera grÀnssnitt, var och en med sin egen uppsÀttning funktioner. WebHID API behandlar varje grÀnssnitt som en separat HID-enhet. För att komma Ät ett specifikt grÀnssnitt kan du behöva kombinera VID/PID-filtrering med anvÀndningssida/anvÀndningsfiltrering för att rikta in dig pÄ önskat grÀnssnitt.
Praktiska exempel och anvÀndningsfall
1. Bygga ett anpassat spelkontrollgrÀnssnitt
FörestÀll dig att du bygger ett webbaserat spel och vill stödja en anpassad spelkontroll. Du kan anvÀnda WebHID API för att direkt lÀsa in data frÄn kontrollerns knappar, joysticks och andra kontroller. Detta gör att du kan skapa en mycket responsiv och uppslukande spelupplevelse.
2. Skapa en webbaserad MIDI-kontroller
Musiker och ljudtekniker kan dra nytta av webbaserade MIDI-kontroller som interagerar med digitala ljudarbetsstationer (DAWs) eller synthesizers. WebHID API gör det möjligt för dig att bygga anpassade MIDI-kontroller som skickar och tar emot MIDI-meddelanden direkt i webblÀsaren.
3. Interagera med vetenskapliga instrument
Forskare och vetenskapsmÀn kan anvÀnda WebHID API för att interagera med vetenskapliga instrument, sÄsom dataförvÀrvsenheter, sensorer och mÀtverktyg. Detta gör att de kan samla in och analysera data direkt i en webbaserad instrumentpanel eller analysverktyg.
4. TillgÀnglighetsapplikationer
WebHID ger möjligheter att skapa hjÀlpmedelsteknik. Till exempel kan specialiserade inmatningsenheter för anvÀndare med motoriska nedsÀttningar integreras direkt i webbapplikationer, vilket ger mer anpassade och tillgÀngliga upplevelser. Globala exempel kan inkludera integrering av specialiserade ögonspÄrningsenheter för handsfree-navigering eller anpassningsbara knappmatriser för Ätkomst med en enda brytare över olika sprÄk och inmatningsmetoder.
WebblÀsarövergripande kompatibilitet och sÀkerhetsövervÀganden
1. WebblÀsarstöd
WebHID API stöds för nÀrvarande i Chromium-baserade webblÀsare (Chrome, Edge, Opera) och Àr under utveckling för andra webblÀsare. Innan du implementerar WebHID API i din applikation Àr det viktigt att kontrollera webblÀsarkompatibiliteten och tillhandahÄlla fallback-mekanismer för webblÀsare som inte stöder API:et.
2. SÀkerhetsövervÀganden
WebHID API Àr designat med sÀkerhet i Ätanke. WebblÀsaren uppmanar anvÀndaren att ge tillÄtelse innan en webbapplikation fÄr Ätkomst till en HID-enhet. Detta förhindrar att skadliga webbplatser fÄr Ätkomst till kÀnslig hÄrdvara utan anvÀndarens samtycke. Dessutom fungerar WebHID API inom webblÀsarens sÀkerhetssandlÄda, vilket begrÀnsar applikationens Ätkomst till systemresurser.
- Endast HTTPS: WebHID, liksom andra kraftfulla webb-API:er, krÀver en sÀker kontext (HTTPS) för att fungera.
- AnvÀndargester: Att begÀra enhetsÄtkomst krÀver vanligtvis en anvÀndargest (t.ex. ett knapptryck) för att förhindra oönskade ÄtkomstbegÀranden.
- Behörighets-API: Behörighets-API:et kan anvÀndas för att frÄga och hantera WebHID-behörigheter.
Felsökning av vanliga problem
1. Enheten hittades inte
Om din applikation inte kan hitta HID-enheten, dubbelkolla VID och PID. Se till att de matchar enhetens faktiska identifierare. Kontrollera ocksÄ att enheten Àr korrekt ansluten och kÀnns igen av operativsystemet.
2. Behörighet nekad
Om anvĂ€ndaren nekar behörighet att komma Ă„t HID-enheten kommer din applikation inte att kunna kommunicera med den. Hantera detta scenario smidigt genom att visa ett meddelande för anvĂ€ndaren och förklara varför Ă„tkomst behövs. ĂvervĂ€g att tillhandahĂ„lla alternativa sĂ€tt för anvĂ€ndaren att interagera med din applikation.
3. Dataformatproblem
HID-enheter anvÀnder ofta anpassade dataformat för att skicka och ta emot data. Du mÄste förstÄ enhetens dataformat och implementera lÀmplig parsning och serialiseringslogik i din applikation. Se enhetstillverkarens dokumentation för information om dataformatet.
Slutsats
WebHID API ger webbutvecklare möjlighet att skapa innovativa och interaktiva webbapplikationer som kommunicerar direkt med Human Interface Devices. Genom att förstÄ principerna för enhetsupprÀkning, filtrering och anslutningshantering kan du frigöra den fulla potentialen hos WebHID API och skapa övertygande anvÀndarupplevelser. Omfamna kraften i WebHID för att ansluta webben till den fysiska vÀrlden och frÀmja nya möjligheter till kreativitet, produktivitet och tillgÀnglighet över hela vÀrlden.